{ Esta unidad contiene las funciones y procedimientos comunes para la gestión de
 el editor de textos

  Copyright (C) 2010 Jorge Turiel <contact>

  This source is free software; you can redistribute it and/or modify it under
  the terms of the GNU General Public License as published by the Free
  Software Foundation; either version 2 of the License, or (at your option)
  any later version.

  This code is distributed in the hope that it will be useful, but WITHOUT ANY
  WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
  details.

  A copy of the GNU General Public License is available on the World Wide Web
  at <http://www.gnu.org/copyleft/gpl.html>. You can also obtain it by writing
  to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
  MA 02111-1307, USA.
}
unit uEditorComun;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils,ComCtrls,Controls,SynMemo,uMain;
  //Muestra la pestaña (tabsheet) que tiene el valor pasado como parametro en su propieda tag
Procedure MuestraTab (idTab: LongInt);
//Este procedimiento crea una nueva pestaña, y dentro de ella, crea un SynMemo.

Procedure CrearEditor (stNombre : String; stRuta : String);
//Guardar el texto cotenido en  synmemo que esta en un tab con id pasado por parámetro
Procedure GuardarEditor (idTab : longInt; stRuta : string);

//Cierra Todas las pestañas
Procedure CerrarTabs;
//Cierra la Pestañá Actual
Procedure CerrarPestanaActual;
implementation
uses uEditor,Ucomun;
Procedure GuardarEditor (idTab : longInt; stRuta : string);
Var
  i : integer;
  tab : TTabSheet;
  Editor : TSynMemo;
  n: LongInt;
  Nombre: String;
Begin
  I:= 0;
  With frMain do
  Begin

  While i < frEditor.Contenedor.PageCount do
  Begin
  n:= frEditor.Contenedor.Pages[i].Tag;
     if frEditor.Contenedor.Pages[i].Tag = idTab then
     Begin
        Tab := frEditor.Contenedor.Pages[I];
        if Tab <> nil Then
        Begin
          Editor := TSynMemo(tab.Controls[0]);
          Nombre := frEditor.Contenedor.Pages[I].Caption;
          Editor.Lines.SaveToFile(stRuta+Nombre);
          i := frEditor.Contenedor.PageCount;
        end;
     end;
     Inc(I);
  end;
  end;
end;

procedure CerrarTabs;
var
  I: Integer;
begin
  With FrMain.frEditor do
  Begin
     For I := 0 to Contenedor.ControlCount-1 Do
     Begin
       Contenedor.Pages[I].Free;
     end;
  end;
end;

procedure CerrarPestanaActual;
begin
  With FrMain.frEditor do
  Begin
    If Contenedor.PageCount < 1 Then
      Exit;
   Contenedor.ActivePage.Free;
  end;
end;



Procedure MuestraTab (idTab: LongInt);
Var
 I : Integer;
Begin
 I := 0;
 While I < frEditor.Contenedor.PageCount do
 Begin
    If frEditor.Contenedor.Pages[I].Tag = idTab Then
    Begin
      frEditor.Contenedor.Pages[I].Show;
      i := frEditor.Contenedor.PageCount;
    end;
    inc (I);
 end;
end;
{
Este procedimiento crea una nueva pestaña, y dentro de ella, crea un SynMemo.
 Recibe dos parámetros: stNombre: es el nombre que se le dará a la pestaña
                        stRuta: es la ruta del fichero que se debe cargar, sino es una cadena vacia
 }
Procedure CrearEditor (stNombre : String; stRuta : String);
Var
 TabSheet : TTabSheet;
 SynMemo : TSynMemo;
Begin

With frMain do
begin
   TabSheet := TTabSheet.Create (frEditor.Contenedor);
   TabSheet.Name:= stNombre+IntToStr (nTabSheet);
   TabSheet.PageControl := frEditor.Contenedor;
   TabSheet.Caption := stNombre+Ext;
   TabSheet.Tag:= nTabSheet;
   //TabSheet.CanTab := True;

   SynMemo := TSynMemo.Create(TabSheet);
   SynMemo.Parent := TabSheet;
   SynMemo.Align:= alClient;
   SynMemo.Lines.Clear;
   if stRuta <> '' Then
   Begin
     SynMemo.Lines.LoadFromFile(stRuta);
   end;
end;
Inc (nTabSheet);

end;

end.

